
# @target:  hello
# @input: files main.o a.o
# @cmd: gcc -o target_name（目标文件，或者PHONY） input_files（依赖目标）
# 执行顺序是  main.o -> a.o -> hello 
# 变量 
#使用全局变量 函数 不同目录 的方法
 
# target : input1(依赖1) input2(依赖2)  

# $@	表示目标

#  $^ 表示所有的依赖

#  $< 表示第一个依赖

# := 即时赋值

# ?= 延时赋值

# += 附加
BUILD_DIR = output

C_SRC_PATh = src

C_SRC=$(C_SRC_PATh)/main.c $(C_SRC_PATh)/a.c

C_OBJ =$(BUILD_DIR)/main.o $(BUILD_DIR)/a.o

C_INC_PATH = inc

C_INC = $(C_INC_PATH)/main.h $(C_INC_PATH)/a.h
 

TARGET = hello 

.PHONY: all

# # 依赖创建目录和编译 
all: $(BUILD_DIR)/$(TARGET)

$(BUILD_DIR)/$(TARGET):$(BUILD_DIR) $(C_OBJ)	 
	gcc -o $@ $(C_OBJ)

$(BUILD_DIR)/%.o:$(C_SRC_PATh)/%.c
	gcc -c $< -I$(C_INC_PATH) -o $@

#替代下面内容，通配符%.o:%.c 前面加上目录名
# $(BUILD_DIR)/main.o:
# 	gcc -c src/main.c -Iinc -o $@
# $(BUILD_DIR)/a.o :
# 	gcc -c src/a.c -Iinc -o $@
  
# 创建build目录
$(BUILD_DIR):	 
	mkdir $@
  
.PHONY:clean
clean : 
	rm -rf $(BUILD_DIR) 